A computer system typically involves multiple components working in cooperation to perform a task. For example, a computer system may include one or more co-operating instruction processors. The instruction processors may be supported by components such as communication busses, cache memories, shared and dedicated memories, input/output (I/O) devices, interface hardware, and the like.
The process of designing and ensuring proper functionality of these constituent components, i.e., the development process, is often involved and time consuming. In addition, the demand for computer systems of increasing complexity, such as computer systems that incorporate an increasing number of co-operating instruction processors, further increases the time and resources required to design and ensure the proper functionality of components.
In order to expedite the design process, emulation tools are often used to assist in testing the functionality of a component or system being designed. During this process, one or more emulation modules are often developed to interface with and test the functionality of the components being designed. For example, a designer currently developing a memory architecture may use an emulation module to mimic the functionality of an associated instruction processor. The emulated instruction processor may be used, for example, to interact with the memory architecture being developed in a manner that conforms to that of an actual instruction processor in order to test the operation of the memory architecture. As the processor itself may also not yet be fully implemented, the use of an emulated instruction processor allows the development of the actual instruction processor and the memory architecture to proceed concurrently. In this manner, the development period needed to complete the overall computer system may be compressed.
A designer may develop an emulation module for a particular component by utilizing an editor or other software application to describe the functionality of the component in accordance with a hardware description language (HDL). Examples of widely-used HDLs include the Very high-speed integrated circuits Hardware Description Language (VHDL) and Verilog™, which is described in the IEEE Verilog 1364-2000 standard. These languages support syntaxes that appear similar to software programming languages, such as C++ and Java, and allow the designer to define and simulate components using high-level code by describing the structure and behavior of components.
While the use of emulation can greatly aid in the development of the computer system, emulation modules may require extended functionality and resources to properly aid the design of computer systems of increasing complexity. For example, an emulated instruction processor may require extended functionality and resources to account for the growing complexity associated with the incorporation of multiple co-operating instruction processors.
As one example, extended functionality and resources may be required to accurately emulate inter-processor messaging. In a multi-processor computing system, the instruction processors may be coupled via a dedicated communication bus. The co-operating instruction processors exchange inter-processor messages to assist in the execution of computing tasks. More specifically, the instruction processors may exchange messages to properly synchronize parallel execution of instruction streams to more efficiently complete a common task, ensure cache coherency, offload tasks between processors, control access to shared resources, and the like. Different types of inter-processor messages, such as directed and broadcast message types, may be used. More particularly, a source instruction processor may send a direct message to a specific destination instruction processor via a common communication bus. In contrast, the source instruction processor may send a broadcast message to multiple instruction processors connected to the common communication bus. Improper inter-processor messaging may compromise the efficient nature of co-operating processors, or even cause computing errors or system failures. Thus, techniques for accurately emulating inter-processor messaging functions may aid in the design and development of multi-processor computing systems.